/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.mindbox.mueblesalpes.presentacion.seguridad;

import com.mindbox.mueblesalpes.negocio.entity.Cliente;
import com.mindbox.mueblesalpes.negocio.entity.TipoUsuario;
import com.mindbox.mueblesalpes.negocio.entity.Usuario;
import com.mindbox.mueblesalpes.negocio.seguridad.ISecurityService;
import com.mindbox.mueblesalpes.presentacion.sesion.SessionInfo;
import com.mindbox.mueblesalpes.presentacion.utils.ReglasNavegacion;
import com.mindbox.mueblesalpes.presentacion.utils.RequestParameters;
import javax.ejb.EJB;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;


/**
 * BackingBean encargado de la página de logueo
 * @author Jaimoto
 */
public class SecurityBean {

    @EJB
    private ISecurityService securityService;
    private String username;
    private String pwd;
    private String next;

    public SecurityBean() {
        HttpSession sesion = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
        next = (String)sesion.getAttribute(RequestParameters.next_page.name());
    }

    /**
     * Acción encargada de validar el usuario en el sistema
     * @return regla de navegación
     */
    public String login(){
        HttpSession sesion = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
        Usuario user = getSecurityService().login(getUsername(), getPwd());
        SessionInfo sesionInfo = (SessionInfo) sesion.getAttribute(SessionInfo.class.getName());
        if(sesionInfo == null)
            sesionInfo = new SessionInfo();
        //obtener regla de navegación posterior al logueo
        sesion.removeAttribute(RequestParameters.next_page.name());
        if(user.getTipoUsuario() == TipoUsuario.ADMINISTRADOR){
            sesionInfo.setUsuario(user);
            sesion.setAttribute(SessionInfo.class.getName(), sesionInfo);
            //validar si se tiene alguna regla de navegacion
            if(getNext() != null && getNext().trim().length() != 0 ){
                return getNext();
            }else{
                return "inicio";
            }
        }else{
            Cliente cliente = getSecurityService().getUsuario(user);
            sesionInfo.setUsuario(user);
            sesionInfo.setCliente(cliente);
            sesion.setAttribute(SessionInfo.class.getName(), sesionInfo);
            //validar si se tiene alguna regla de navegacion
            if(getNext() != null && getNext().trim().length() != 0 ){
                return getNext();
            }else{
                return "inicio";
            }
        }
    }

    /**
     * Acción encrgada de cerrar la sesión de un usuario
     * @return Regla de navegacion
     */
    public String logout(){
      HttpSession sesion = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
      sesion.removeAttribute(SessionInfo.class.getName());
      return ReglasNavegacion.logout.toString();
    }

    /**
     * @return the securityService
     */
    public ISecurityService getSecurityService() {
        return securityService;
    }

    /**
     * @param securityService the securityService to set
     */
    public void setSecurityService(ISecurityService securityService) {
        this.securityService = securityService;
    }

    /**
     * @return the username
     */
    public String getUsername() {
        return username;
    }

    /**
     * @param username the username to set
     */
    public void setUsername(String username) {
        this.username = username;
    }

    /**
     * @return the pwd
     */
    public String getPwd() {
        return pwd;
    }

    /**
     * @param pwd the pwd to set
     */
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    /**
     * @return the next
     */
    public String getNext() {
        return next;
    }

    /**
     * @param next the next to set
     */
    public void setNext(String next) {
        this.next = next;
    }

    

    
}
